﻿// <copyright file="BasicGame.cs" company="SingularityShift">
// Copyright (c) 2009 SingularityShift.com
// </copyright>
// <author>Ben McClure</author>
// <email>ben@singularityshift.com</email>
// <date>2009-08-14</date>
// <summary>A Base implementation of a generic IGame which uses generic IMods</summary>
namespace GameLib.Games.Components
{
    using System;
    using GameLib.Games;

    /// <summary>
    /// A generic base implementation of a generic AbstractGame
    /// </summary>
    /// <typeparam name="T">The type of IMod this game uses</typeparam>
    public class BasicGame<T> : AbstractGame<T>, IGame<T>, IGame where T : IMod
    {
        /// <summary>
        /// When overridden by an extending class, this method is designed to export the activeMods list to the game, essentially putting it into effect.
        /// </summary>
        public override void ExportActiveMods()
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// When overridden by an extending class, this method is designed to export the installedMods list to the game. This should not install anything, but should organize the installed mods according to the settings and order of the IModList.
        /// </summary>
        public override void ExportInstalledMods()
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// When overridden by an extending class, this method is designed to import the currently active mods into the activeMods property.
        /// </summary>
        public override void ImportActiveMods()
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// When overridden by an extending class, this method is designed to import the currently installed mods into the activeMods property
        /// </summary>
        public override void ImportInstalledMods()
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// When overridden by an extending class, this method is designed to enable (or activate) a mod that exists on the system. In games that support it, this should have the effect of making an installed (but deactivated) mod active in the game.
        /// </summary>
        /// <param name="mod">The IMod object describing the mod to enable</param>
        public override void EnableMod(T mod)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// When overridden by an extending class, this method is designed to disable (or deactivate) a mod that exists on the system. In games that support it, this should have the effect of removing the mod from working in the game, without uninstalling it.
        /// </summary>
        /// <param name="mod">The IMod object describing the mod to disable</param>
        public override void DisableMod(T mod)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Checks if the implementing game is currently installed.
        /// </summary>
        /// <returns>A bool signifying whether or not the game is installed.</returns>
        public override bool IsInstalled()
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Creates a new (blank) instance of the implementing mod's type. All the implementing mod should do is include a call to the desired constructor, with the desired default values.
        /// </summary>
        /// <returns>A blank instance of the implementing mod's type, which is invariably an IMod</returns>
        public override T CreateMod()
        {
            return (T)(IMod)new BasicMod(this);
        }
    }

    /// <summary>
    /// A default implementation of the IGame interface which can be extended to create custom games, or used as a generic Game object
    /// </summary>
    public class BasicGame : AbstractGame<BasicMod>
    {
        /// <summary>
        /// When overridden by an extending class, this method is designed to enable (or activate) a mod that exists on the system. In games that support it, this should have the effect of making an installed (but deactivated) mod active in the game.
        /// </summary>
        /// <param name="mod">The IMod object describing the mod to enable</param>
        public override void EnableMod(BasicMod mod)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// When overridden by an extending class, this method is designed to disable (or deactivate) a mod that exists on the system. In games that support it, this should have the effect of removing the mod from working in the game, without uninstalling it.
        /// </summary>
        /// <param name="mod">The IMod object describing the mod to disable</param>
        public override void DisableMod(BasicMod mod)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// When overridden by an extending class, this method is designed to export the activeMods list to the game, essentially putting it into effect.
        /// </summary>
        public override void ExportActiveMods()
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// When overridden by an extending class, this method is designed to export the installedMods list to the game. This should not install anything, but should organize the installed mods according to the settings and order of the IModList.
        /// </summary>
        public override void ExportInstalledMods()
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// When overridden by an extending class, this method is designed to import the currently active mods into the activeMods property.
        /// </summary>
        public override void ImportActiveMods()
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// When overridden by an extending class, this method is designed to import the currently installed mods into the activeMods property
        /// </summary>
        public override void ImportInstalledMods()
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Checks if the implementing game is currently installed.
        /// </summary>
        /// <returns>A bool signifying whether or not the game is installed.</returns>
        public override bool IsInstalled()
        {
            throw new NotImplementedException();
        }

        public override BasicMod CreateMod()
        {
            throw new NotImplementedException();
        }
    }
}